package com.myKng.content.service;

import com.myKng.content.model.Knowledge;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.Optional;

public interface KnowledgeService {
    
    /**
     * 创建知识条目
     * @param knowledge 知识条目信息
     * @return 创建后的知识条目
     */
    Knowledge createKnowledge(Knowledge knowledge);
    
    /**
     * 更新知识条目
     * @param id 知识条目ID
     * @param knowledge 更新的知识条目信息
     * @return 更新后的知识条目
     */
    Knowledge updateKnowledge(Long id, Knowledge knowledge);
    
    /**
     * 获取知识条目详情
     * @param id 知识条目ID
     * @return 知识条目详情
     */
    Optional<Knowledge> getKnowledgeById(Long id);
    
    /**
     * 删除知识条目
     * @param id 知识条目ID
     */
    void deleteKnowledge(Long id);
    
    /**
     * 分页查询知识条目列表
     * @param pageable 分页参数
     * @return 知识条目分页列表
     */
    Page<Knowledge> getKnowledgeList(Pageable pageable);
    
    /**
     * 根据分类ID查询知识条目列表
     * @param categoryId 分类ID
     * @param pageable 分页参数
     * @return 知识条目分页列表
     */
    Page<Knowledge> getKnowledgeListByCategoryId(String categoryId, Pageable pageable);
    
    /**
     * 根据标签查询知识条目列表
     * @param tag 标签
     * @param pageable 分页参数
     * @return 知识条目分页列表
     */
    Page<Knowledge> getKnowledgeListByTag(String tag, Pageable pageable);
    
    /**
     * 根据关键词搜索知识条目
     * @param keyword 关键词
     * @param pageable 分页参数
     * @return 知识条目分页列表
     */
    Page<Knowledge> searchKnowledge(String keyword, Pageable pageable);
    
    /**
     * 增加知识条目浏览次数
     * @param id 知识条目ID
     */
    void incrementViewCount(Long id);
    
    /**
     * 查询用户创建的知识条目列表
     * @param userId 用户ID
     * @param pageable 分页参数
     * @return 知识条目分页列表
     */
    Page<Knowledge> getKnowledgeListByUser(String userId, Pageable pageable);
}